[h1][i]MORE TO COME![/i][/h1]

[list]
[*]4-bit register
[*]Edge counter (use as a clock)
[*]8-bit multiplexer
[*]8-bit de-multiplexer
[*]8-bit addressable memory module (read gated, so you can combine them to add memory)
[/list]

[h1]4-bit register[/h1]
Stores 4 bits of binary data from a ribbon.
Has 2 control ports:
[list]
[*]Write - Updates the stored value with the value from the input.
[*]Read - Sends the stored value to the output.
[/list]

Writes happen before reads, so if both control ports are on, there is no delay.
The "Read Enable" port is so that multiple registers can share the same output ribbon, but you can choose which one will output to it (e.g. by using a demultiplexer).

Disconnected control ports are treated as "on" (green), so depending on which control ports you leave unconnected, it will operate slightly differenly:
[list]
[*]No control ports connected - Just acts as a "diode" (buffer with no delay) for a ribbon.
[*]Only read control connected - The "Read Enable" gate controls whether the input signal passes through to the output or not.  So it's a one-way signal gate that you can turn on and off.
[*]Only write control connected - Acts like a D-flop, but for 4 bits of data instead of just one.
[*]Both connected - Normal: both write-gating and read-gating; a read-gated D-flop.
[/list]

[h1]Edge Counter [i](NEW!)[/i][/h1]
Counts the number of times the input signal changes and outputs that in binary to a ribbon.

[h1]Mux and DeMux [i](NEW!)[/i][/h1]
Connect the output port of the Mux to the input port of the DeMux.
Then attach the output of the Edge Counter to the control ports on each.
The Mux will send one bit per tick of the counter to the DeMux
In 8 ticks of the counter, the DeMux will refresh its output, and it will match the input of the Mux.
The DeMux refreshes when the highest bit on the Edge Counter output changes.

You can string them together to e.g. send 32-bits at a time over a ribbon.

[h1]8-bit addressable memory module [i](NEW!)[/i][/h1]
Connect data in and address in to the left side, data out to the right side.
Connect a control ribbon to the R / W port.
[list]
[*]The first bit on the control ribbon is the "read enable" signal; it copies the stored value to the output.
[*]The second bit on the control ribbon is the "write enable" signal; it copies the input to the stored value.
[*]The third bit on the control ribbon is ignored.
[*]The fourth bit on the control ribbon is ignored.
[/list]

The write enable and read enable bits allow multiple modules to share the same input and output bus, without interfering with each other.

I don't know why the "bloom" animations aren't working.  I'll try to get them working in a later revision.


[h1]Planned (and being worked on)[/h1]
[list]
[*]16-bit addressable read-only memory module
[*]8-bit stack-based ALU (16 instructions: 4 stack control, 4 arithmetic, 4 bitwise logic, 4 special)
[*]8-bit instruction decoder (I already have an instruction set designed that uses the above parts.)
[/list]

With these additional parts, you should be able to build a fully programmable computer in ONI.

(The stack-based ALU can be used as an instruction sequencer and call stack, as a register, as an ALU, etc.  The instruction decoder takes an 8-bit instruction and converts it into two sequential sets of 16 control bits (which determine read channels, write channels, predication, stack pushes and pops, etc.  The ROM is where you write the program.  I/O with sensors and actuators I'm imagining being memory-mapped, statically.)


[i]Source code available [url=https://github.com/happyjack27/ONI-Mods] here [/url].[/i]
